package com.ic.service.impl;

import com.ic.base.AbstractBaseService;
import com.ic.base.PageInfo;
import com.ic.dao.ItemInfoDao;
import com.ic.dao.ItemTypeDao;
import com.ic.dao.PicInfoDao;
import com.ic.dao.SubjectDao;
import com.ic.entity.ItemInfo;
import com.ic.entity.ItemType;
import com.ic.entity.PicInfo;
import com.ic.service.ItemTypeService;
import com.ic.util.DateUtil;
import com.ic.util.KeyGenerateUtil;
import com.ic.util.StringUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Description: 物品类型业务类
 * Author: spark
 * Date  : 2017/6/25
 * Time  : 17:28.
 */
@Service("itemTypeService")
public class ItemTypeServiceImpl extends AbstractBaseService<ItemType> implements ItemTypeService {
	@Resource
	private ItemTypeDao itemTypeDao;

	@Resource
	private SubjectDao subjectDao;

	@Resource
	private ItemInfoDao itemInfoDao;

	@Resource
	private PicInfoDao picInfoDao;

	//表示有效状态
	@Value("${state.valid}")
	private String STATE_VALID;

	//表示无效状态
	@Value("${state.invalid}")
	private String STATE_INVALID;

	/**
	 * 添加物品类型信息
	 *
	 * @param itemType 物品类型信息
	 * @return 返回受影响的记录数
	 */
	@Override
	public Integer insert(ItemType itemType) {
		return itemTypeDao.insert(itemType);
	}

	/**
	 * 根据查询条件获取物品类型
	 *
	 * @param itemType 物品类型
	 * @param pageInfo 分页信息
	 * @return 返回Map
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Map showItemTypeList(ItemType itemType, PageInfo pageInfo) {
		Map queryMap = new HashMap();
		Map resultMap = new HashMap();
		List list = new ArrayList();
		queryMap.put("subjectName", itemType.getSubjectName());
		queryMap.put("itemName", itemType.getItemName());
		// 查询符合条件的记录总数
		int totalSize = itemTypeDao.selectCount(queryMap);
		if (totalSize == 0) {
			resultMap.put("rows", 0);
			resultMap.put("total", list);
			return resultMap;
		}
		pageInfo.setTotalSize(totalSize);
		queryMap.put("startIndex", pageInfo.getStartIndex());
		queryMap.put("pageSize", pageInfo.getPAGE_SIZE());
		// 查询符合条件的记录信息
		list = itemTypeDao.showItemTypeList(queryMap);
		resultMap.put("rows", list);
		resultMap.put("total", totalSize);
		return resultMap;
	}

	/**
	 * 根据状态查询物品类型信息
	 *
	 * @param state 物品类型状态
	 * @return 返回Map
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Map selectSubject(String state) {
		Map subjectMap = new HashMap<>();
		List list = subjectDao.selectSubject(state);
		subjectMap.put("subject", list);
		return subjectMap;
	}

	/**
	 * 检查货号是否已存在
	 *
	 * @param itemNum 货号
	 * @return 返回Map
	 */
	@SuppressWarnings("unchecked")
	public Map checkItemNum(String itemNum) {
		Map map = new HashMap<>();
		int count = itemTypeDao.checkItemNum(itemNum);
		map.put("count", count);
		return map;
	}

	/**
	 * 添加物品类型
	 *
	 * @param itemType 物品类型
	 * @param picInfo  图片
	 */
	public void addItemType(ItemType itemType, PicInfo picInfo) {
		itemType.setId(KeyGenerateUtil.getInstance().getKey());
		itemType.setCreateTime(DateUtil.getNowTimeStamp());
		//添加物品类型信息
		insert(itemType);
		//添加物品信息
		int itemInfoCount = Integer.parseInt(itemType.getQuantity());
		List list = new ArrayList<>();
		for (int i = 0; i < itemInfoCount; i++) {
			ItemInfo itemInfo = new ItemInfo();
			itemInfo.setId(KeyGenerateUtil.getInstance().getKey());
			itemInfo.setItemTypeId(itemType.getId());
			itemInfo.setItemInfoNum("No." + StringUtil.generateNo(10000));
			list.add(itemInfo);
		}
		itemInfoDao.insertList(list);
		//添加图片信息
		if (picInfo != null) {
			picInfo.setItemTypeId(itemType.getId());
			picInfo.setId(KeyGenerateUtil.getInstance().getKey());
			picInfoDao.insert(picInfo);
		}
	}

	/**
	 * 根据物品类型ID查询物品类型
	 *
	 * @param id 物品类型ID
	 * @return 返回Map
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Map showItemType(String id) {
		Map map = new HashMap<>();
		ItemType itemType = (ItemType) itemTypeDao.showItemType(id).get(0);
		map.put("itemType", itemType);
		return map;
	}

	/**
	 * 根据ID更新物品类型和图片信息
	 *
	 * @param itemType 物品类型
	 * @param picInfo  图片信息
	 * @return 返回受影响记录数
	 */
	public Integer updateByPrimaryKeySelective(ItemType itemType, PicInfo picInfo) {
		// 有图片进行更新
		if (picInfo != null) {
			// 原来有图片
			if (StringUtil.notNullAndNotBlank(picInfo.getId())) {
				picInfoDao.updateByPrimaryKeySelective(picInfo);
			} else {
				// 原来没有上传图片
				picInfo.setId(KeyGenerateUtil.getInstance().getKey());
				picInfo.setItemTypeId(itemType.getId());
				picInfoDao.insert(picInfo);
			}
		}


		return itemTypeDao.updateByPrimaryKeySelective(itemType);
	}
}
